package wodegua.d24_file_io;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * ObjectOutputStream(对象字节输出流)
 * 可以把Java对象进行序列化:把Java对象存入到文件中去。
 *
 * 构造器
 * public ObjectOutputStream(outputStream out)      创建对象字节输出流，包装基础的字节输出流
 * 方法
 * public final void writeObject(object) throws IException      把对象写出去
 *
 *
 * ObjectInputStream(对象字节输入流)
 * 可以把Java对象进行反序列化:把存储在文件中的Java对象读入到内存中来
 *
 * 构造器
 * public objectInputStream(InputStream is)     创建对象字节输入流，包装基础的字节输入流
 * 方法
 * public final object readObject()     把存储在文件中的Java对象谈出来
 *
 *
 * 如果要一次序列化多个对象，咋整?
 * 用一个ArrayList集合存储多个对象，然后直接对集合进行序列化即可
 * 注意:ArrayList集合已经实现了序列化接口!
 */
public class d23_ObjectInputOutputStreamTest {
    public static void main(String[] args) {
        User u = new User("张三",10,"123456");
        User u1 = new User("李四",20,"345678");

        try (
                ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("javase/object_out.txt"));
                ObjectInputStream ois = new ObjectInputStream(new FileInputStream("javase/object_out.txt"));
        ) {
//            oos.writeObject(u);
//            System.out.println("反序列化数据成功");
//            System.out.println("---------------------");

            List<User> list = new ArrayList<>();
            list.add(u);
            list.add(u1);
            oos.writeObject(list);

            System.out.println(ois.readObject());
            System.out.println("读取反序列数据成功");
            System.out.println("---------------------");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
